const { Readable } = require('stream');

// 自定义MyReadable类，继承自stream模块的Readable构造函数
class MyReadable extends Readable {
  constructor(options) {
    super(options);
    // 初始化字符代码，从'a'开始
    this.charCode = 'a'.charCodeAt(0);
    // 结束字符代码，到'z'结束
    this.endCharCode = 'z'.charCodeAt(0);
  }
  
  // 实现_read方法，这是Readable流的核心方法
  _read() {
    // 检查是否已经到达结束字符
    if (this.charCode > this.endCharCode) {
      // 推送null表示流结束
      this.push(null);
      return;
    }
    
    // 将当前字符代码转换为字符
    const char = String.fromCharCode(this.charCode);
    
    // 将字符推送到流中
    this.push(char);
    
    // 移动到下一个字符
    this.charCode++;
  }
}

// 创建MyReadable实例
const myReadable = new MyReadable();

// 将流数据输出到process.stdout
myReadable.pipe(process.stdout);

// 监听流结束事件
myReadable.on('end', () => {
  console.log('\n流处理完成！');
});

// 监听错误事件
myReadable.on('error', (err) => {
  console.error('流处理出错:', err);
});

console.log('开始输出a-z字符:');
